#include<iostream>
using namespace std;

const int N=2e5+10;

struct Node{
	int l,r;
	int v;
}tr[N*4];

void pushup(int u)
{
	tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}


void build(int u,int l,int r)
{
	tr[u]={l,r};
	if(l==r)return;
	int mid=l+r>>1;
	build(u<<1,l,mid);
	build(u<<1|1,mid+1,r);
}

int query(int u,int l,int r)
{
if(tr[u].l>=l&&tr[u].r<=r)return tr[u].v;
	int v=0;
	int mid=tr[u].l+tr[u].r>>1;
	if(l<=mid)v=query(u<<1,l,r);
	if(r>mid)v=max(v,query(u<<1|1,l,r));
	return v;
} 

void modify(int u,int x,int c)
{
	if(tr[u].l==x&&tr[u].r==x)
	{
		tr[u].v=c;
		return;
	}
	else
	{
		int mid=tr[u].l+tr[u].r>>1;
		if(x<=mid)modify(u<<1,x,c);
		if(x>mid)modify(u<<1|1,x,c);
		pushup(u);
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int m,p;
	cin>>m>>p;
	build(1,1,m);
	int n=0;
	int last=0;
	while(m--)
	{
	    char op[2];
	    int x;
		cin>>op>>x;
		if(*op=='Q')
		{
			last=query(1,n-x+1,n);
			cout<<last<<endl;
		}
		else
		{
			n++;
			modify(1,n,((long long)x+last)%p);
		}
	}
	return 0;
}
